热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据|二维码_条形码二维码三维码解读

篇首语:本文由编程笔记#小编为大家整理,主要介绍了条形码二维码三维码解读相关的知识,希望对你有一定的参考价值。条形码、二维码、三维码解读

篇首语:本文由编程笔记#小编为大家整理,主要介绍了条形码二维码三维码解读相关的知识,希望对你有一定的参考价值。



条形码、二维码、三维码解读


      • 1 条形码 Bar code
        • 1.1 释义
        • 1.2 识别原理
        • 1.3 编码原理
        • 1.4 示例:Code128编码

      • 2 二维码 QR code
        • 2.1 释义
        • 2.2 QR 码基本结构
        • 2.3 码元结构
        • 2.4 编码规范
        • 2.5 活码

      • 3 三维码 VR code
        • 3.1 释义
        • 3.2 拓展





元旦假期无聊做了个
手绘二维码工具,一直以来都只是用,却对其背后的信息不是很了解,恰逢周末,正好来学习记录一下。

1 条形码 Bar code


1.1 释义



条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。


但是光有这些标识,其实是没多大用途的;需要和条形码识别器进行配合,将标识中“包含”的数据读取出来,才能被用于后续的使用。


1.2 识别原理



条码符号是由反射率不同的“条”、“空”按照一定的编码规则组合起来的一种信息符号。由于条码符号中“条”、“空”对光线具有不同的反射率,从而使条码扫描器接受到强弱不同的反射光信号,相应地产生电位高低不同的电脉冲。而条码符号中“条”、“空”的宽度则决定电位高低不同的电脉冲信号的长短。


条形码扫描器利用光电元件将检测到的光信号转换成电信号,再将电信号通过模拟数字转换器转化为数字信号传输到计算机中处理。我们在生活中,最常见到的就是下面这种设备。


1.3 编码原理

有一篇文章介绍的很全面,这里不再赘述。


1.4 示例:Code128编码



空白+开始位 + [FNC1(为EAN128码时加)] + 数据位 + 检验位 + 结束位+空白
Code128检验位计算:(开始位对应的ID值 + 每位数据在整个数据中的位置×每位数据对应的ID值)% 103


比如我要编码的内容是“TIGER”,则参照码表。


IDCode128ACode128BCode128CBandCode编码值
0SPSP0212222bbsbbssbbss
31??31212321bbsbbsssbbs
37EE37132113bsssbbsbsss
39GG39211313bbsbsssbsss
41II41231311bbsssbsssbs
50RR50231131bbsssbsbbbs
52TT52213311bbsbbbsssbs
101FNC4CODEACODEA311141bbbsbsbbbbs
102FNC1FNC1FNC1411131bbbbsbsbbbs
103StartAStartAStartA211412bbsbssssbss
104StartBStartBStartB211214bbsbssbssss
105StartCStartCStartC211232bbsbssbbbss
106StopStopStop2331112bbsssbbbsbsbb

则按照编码规则后可计算出数据位与校验位((103 + 52 + 241 + 339 + 437 + 550)%103)

开始位StartA(bbsbssssbss)+数据位[T(bbsbbbsssbs) I(bbsssbsssbs) G(bbsbsssbsss) E(bsssbbsbsss) R(bbsssbsbbbs)] + 检验位31(bbsbbsssbbs)+ 结束位Stop(bbsssbbbsbsbb)

即:

bbsbssssbssbbsbbbsssbsbbsssbsssbsbbsbsssbsssbsssbbsbsssbbsssbsbbbsbbsbbsssbbsbbsssbbbsbsbb

然后机器用这个字符串按像素排列,生成条形码

# pip install pySrtich
import os
from pystrich.code128 import Code128Encoder
encoder=Code128Encoder('tiger')
encoder.save("./1.png",bar_width=2)
os.system("./1.png")

详细解读可点击链接


2 二维码 QR code


2.1 释义



二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。



2.2 QR 码基本结构


在这张图中,不难看出:空白区、位置探测图形、矫正图形、定位图形都是固定的。

校正图形:规格确定,校正图形的数量和位置也就确定了;
格式信息:表示改二维码的纠错级别,分为L、M、Q、H;

版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本 每边增加4个模块。

数据区和纠错码字,这块才是我们所有信息的几种汇聚地。

详细结构可参考:链接


2.3 码元结构


可以看出,数据区数据越多,需要的码元空间也就越大,其版本也就越大,我们肉眼能看到的二维码也就越密集。版本最大到 40,也就是说,数据区可存储的数据空间是有限的,超过一定阈值,就无法生成二维码。


2.4 编码规范

第一步,计算出编码数据占据的空间大小,选择最佳版本坑位。

第二步,将数据字符转化成位流。

如需模式转化,则在新的模式段开始前加上模式指示符进行模式转换。在数据序列后面添加终止符。最终位流以8 位进行码字。

在此过程中,需根据修正精度,计算你纠错编码。
按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。

第三步,填充数据到指定位置,生成二维码。
序列顺序如:如:D1, D12, D23, D35, D2, D13, D24, D36, … D11, D22, D33, D45, D34, D46, E1, E23,E45, E67, E2, E24, E46, E68,…

示例
数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),
1)分组:012 345 67
2)转成二进制:012→0000001100 (即8+4)
345→0101011001
67 →1000011
3)转成序列:0000001100 0101011001 1000011
4)字符数 转成二进制:8→0000001000
5)加入模式指示符(上图数字)0001:0001 0000001000 0000001100 0101011001 1000011
对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的


2.5 活码

活码说白了就是二维码内套二维码,外层二维码不会变化,但是经由外部二维码识别到的内容,可以随意更换。

二维码很好用,我自己在公司内有一套专属工具箱(《泰戈尔的工具箱》),里面呢有一系列扫码预览工具,号称“APP 内全场景落地页预览神器”。其就是建立在二维码之上。用的时候绝大多数场景都没啥问题,但是有一些情况下,由于编码跳转链接太过冗长,会导致数据量超出了二维码能承载的上限。

这就导致没办法直接生成二维码去“预览跳转”了。结合市面上常见的“活码”技术,针对这个数据承载量有限的问题,我也有了一套针对性解决方案。

那就是“重定向”(仅支持端内跳转形式的 scheme 来生成二维码)。

比如来看个例子:

生成二维码“活码”

手机与电脑链接至同一台 WiFi 设备下,扫这个码。

可以发现成功 redirect。

我生成的码命名是“http://192.168.0.104:8080/redirect”, 结果扫码后却是"https://blog.csdn.net/marksinoberg"。

这就是“活码”的其中一个应用,目前很好的解决了我在公司内遇到的二维码过长无法生成问题。

不难看出,“活码”可应用的方向多,但受限也比较多,具体场景具体分析吧。


3 三维码 VR code


3.1 释义



三维码, [1] 英文名称VR Code,VR全称Visual Recognition(视觉识别),由创始人陈绳旭 [2] 重新定义标识为“三维码”,并在全球范围内申请相关知识产权保护,其中包括商标。三维码相较于二维码具有更大的信息容量、相同的识别便易性和较好的安全性。其编码方式是先将文本编译一串二进制数字,然后通过特定的算法并结合图片整体的色彩内容,将该二进制数字串与图像信息编码为一组可以通过特定规则解读的阵列。并且该图像阵列除了可以被机器设备读取以外,仅用人眼辨识也可以获取到部分乃至全部文本信息。



3.2 拓展

对三维码我也只是略有耳闻,没有具体了解,有兴趣的可自查,这里不做记录了。


推荐阅读
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文记录了作者对x265开源代码的实现与框架进行学习与探索的过程,包括x265的下载地址与参考资料,以及在Win7 32 bit PC、VS2010平台上的安装与配置步骤。 ... [详细]
  • 本文介绍了使用Rust语言编写、保存和编译程序的简单步骤。首先,打开记事本文件并编写程序代码,然后将代码保存到一个以.rs为扩展名的文件中。接下来,使用rustc命令来编译运行程序。最后,通过命令行运行编译后的程序,得到输出结果。如果遇到编译错误,可以下载Build Tools for Visual Studio 2017来解决。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
author-avatar
HelloMsLin你好_林小姐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有